剛剛房間出現一隻蟑螂,好像是從窗戶飛進來的
對,沒錯,他會飛
經過半小時的抗戰,把他趕到了隔壁房間
拿出了殺蟲劑,直接對他爆噴
明顯聽到他在櫃子下掙扎的聲音
現在,我對隔壁房間的所有地方都噴了滿滿的殺蟲劑
然後關了門,把門的四個邊都噴到爆
又扯太遠了
直前在第八篇有提到了 Neo4j 可以存所謂的 "空間座標"
有鑑於之前有做過 GIS 的經驗,今天就來講講這個主題吧
在講 Neo4j 的空間座標之前,要先講講關於空間座標的基本觀念
直接講結論,畢竟不是專業領域,以策安全不要提細節
在台灣比較常見的標準有
其中 TWD 開頭的那兩個為台灣地區所使用的標準,不重要
今天主要的內容會環繞在 WGS84
WGS84 為目前世界上最常使用的標準
我們常用的 GPS 通常也是使用這套標準
不要太複雜,你直接把他理解成經緯度就可以了
也就大家應該又看過的這東西 --> ( 24.1436026 , 120.7286986 )
那 Neo4j 的空間座標呢,在 Neo4j 裡空間座標主要以兩個系統為主
直角坐標系這邊就不多提,在 Neo4j 中的地理座標系主要有兩種形
通常的寫法長成這個樣子
point({ latitude:toFloat('24.1436026'), longitude:toFloat('120.7286986')})
在 Neo4j 中你可以抓取兩個點的距離
假設,我想知道我的大學跟我今天剛跑的赤崁頂平面直線距離多遠的話
首先先變出兩個點的位置
我的大學
point({ latitude:toFloat('24.1436026'), longitude:toFloat('120.7286986')})
赤崁頂
point({ latitude:toFloat('24.094066'), longitude:toFloat('120.804041')})
然後下這段
WITH point({ latitude:toFloat('24.1436026'), longitude:toFloat('120.7286986')}) AS p1,
point({ latitude:toFloat('24.094066'), longitude:toFloat('120.804041')}) AS p2
RETURN distance(p1,p2)/1000 AS km
就可以簡單地取得距離了
啊,走 136 google 跟我說是 17 km,山路直接繞兩倍 WTF
當然在 Node
中也是可以存空間值的
類似這樣
CREATE (:Map{map:point({ latitude:toFloat('24.1436026'), longitude:toFloat('120.7286986')})})
CREATE (:Map{map:point({ latitude:toFloat('24.094066'), longitude:toFloat('120.804041')})})
來做跟剛剛一樣的事吧
MATCH (n),(m) where id(n)=0 AND id(m)=1
RETURN distance(n.map,m.map)/1000 as KM
嗯,是一樣的結果呢,廢話
在不收尾就要爆啦
Neo4j 的空間座標差不多就是這些內容了
剩下的 WGS84 3D、笛卡兒座標系,基本上大同小異
就不多說了
以上,這個主題寫起來還滿有趣的ww
下篇 打打看 Neo4j Http Api 吧
究竟鐵人賽能不能完賽呢,讓我們繼續看下去
排版好看的版本同步更新在我的 HackMD